/*
 * PagFormularioValidarAtividade.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.util.ArrayList;
import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlAtividade;
import srac.controleatividades.cci.CtrlInterno;
import srac.controleatividades.cdp.AtividadeComplementar;
import srac.controleatividades.cdp.Categoria;
import srac.controleatividades.cdp.StatusAtividadeComplementar;
import srac.controleatividades.cdp.TipoAtividade;

public class PagFormularioValidarAtividade extends GenericForwardComposer {

    private CtrlAtividade ctrl = CtrlAtividade.getInstance();
    private CtrlInterno ctrlInterno = CtrlInterno.getInstance();
    private Window winFormularioValidarAtividade;
    private Combobox categorias;
    private Combobox tipoAtividades;
    private Textbox observacao;
    private Intbox creditosRequeridos;
    private Intbox creditosObtidos;
    private Div legenda;
    private AtividadeComplementar obj;

    @Override
    public void doAfterCompose(Component comp) throws Exception {

        super.doAfterCompose(comp);
        
        obj = (AtividadeComplementar) arg.get("obj");
        
        List<Categoria> c = ctrlInterno.obterCategorias(); //Obtem as atividades cadastradas

        categorias.setModel(new ListModelList(c, true));
        categorias.setReadonly(true);
    }

    private void preencherTela() {
        if (obj.getTipoAtividade().getCategoria() != null) {
            ((ListModelList) categorias.getModel()).addToSelection(obj.getTipoAtividade().getCategoria());
            onSelect$categorias();
        }
        if (obj.getTipoAtividade() != null) {
            ((ListModelList) tipoAtividades.getModel()).addToSelection(obj.getTipoAtividade());
        }
        if (obj.getCreditosRequeridos() != obj.getTipoAtividade().getCreditos()) {
            creditosRequeridos.setStyle("color:blue");
            legenda.setVisible(true);
        }
        else
        {
            creditosRequeridos.setStyle("color:black");
            legenda.setVisible(false);
        }
        creditosRequeridos.setValue(obj.getCreditosRequeridos());
        creditosObtidos.setValue(obj.getCreditosRequeridos());
        
        observacao.setText(obj.getObservacao());
    }
    
    public void onSelect$categorias() {
        Categoria c = null;
        c = (Categoria) categorias.getSelectedItem().getValue();
        tipoAtividades.setSelectedItem(null);

        if (c != null) {
            List<TipoAtividade> listTipoAtividades = ctrlInterno.obterTipoAtividades(c);
            tipoAtividades.setModel(new ListModelList(listTipoAtividades, true));
        }
    }

    public void onCreate$winFormularioValidarAtividade() {
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winFormularioValidarAtividade.detach();
        }
        preencherTela();
        
    }

    public void onClick$confirmarValidacao(Event event) {
        AtividadeComplementar a = null;
        String msg = valido();
        if (msg.trim().equals("")) {
            List<Object> atributosNovos;
            atributosNovos = new ArrayList<Object>();                
            
            atributosNovos.add(tipoAtividades.getSelectedItem().getValue());
            atributosNovos.add(creditosObtidos.getValue());            
            
            //Se algum atributo da atividade foi modifica setar o status para aceita com modificação
            if (ctrl.atividadeModificada(obj, atributosNovos) || obj.getStatusAtividadeComplementar().equals(StatusAtividadeComplementar.ACEITA_MODIFICADA)) {
                obj.setStatusAtividadeComplementar(StatusAtividadeComplementar.ACEITA_MODIFICADA);
                obj.setTipoAtividade((TipoAtividade) tipoAtividades.getSelectedItem().getValue());
                obj.setCreditosObtidos(creditosObtidos.getValue());
                obj.setObservacao(observacao.getText());
            }
            else{ //Senão setar o status para aceita
                obj.setStatusAtividadeComplementar(StatusAtividadeComplementar.ACEITA);
            }

            a = ctrl.alterarAtividadeComplementarValidacao(obj); //Alterar a atividade
            
            if (a != null) {
                winFormularioValidarAtividade.onClose();
            } 
        } 
        else {
            Messagebox.show(msg, "Informe:", 0, Messagebox.EXCLAMATION);
        }
    }

    public void onClick$voltar(Event event) {
        winFormularioValidarAtividade.onClose();
    }

    public void limparCampos() {
        categorias.setSelectedItem(null);
        tipoAtividades.setSelectedItem(null);
        creditosObtidos.setValue(null);
        observacao.setText("");
    }

    private String valido() { //Verifica se algum campo está em branco
        String msg = "";
        if (categorias.getSelectedItem() == null) {
            msg += "- Categoria\n";
        }
        if (tipoAtividades.getSelectedItem() == null) {
            msg += "- Tipo da Atividade\n";
        }
        if (creditosObtidos.getValue() == null) {
            msg += "- Creditos Obtidos\n";
        }

        return msg;
    }
}
